iT邦幫忙

2021 iThome 鐵人賽

DAY 23
1
Software Development

透過迷霧,看破一切~~ZOOPARTY 動物園派對桌遊設計系列 第 23

[第二十三隻羊] 迷霧森林舞會XVII 玩家x座位x遊戲角色 多對多關聯

  • 分享至 

  • xImage
  •  

天亮了 昨晚是平安夜

關於迷霧森林故事

說服

洛神:3號 8號平票,進入PK環節,3號開始發言
3號:現在也不能拍身份,怎麼辦??10號號剛定義8的身份也蠻怪的,而且10號賣視野跟我講說6號應該是好人,他哪來的視野說6號是好人,如果你們有兩狼是不是可以直接自爆了,對不對,8有投10我有看到,不然你們投我好了,我是好人可是我不想要輸,如果8號發言真的非常好的話,真的沒辦法,就這樣,8跟10都很奇怪,我在聽一次8好了,過

8號:好,我用我的視角跟想法,來就是說服大家看看,我覺得6號應該是狼走的,10號應該是最後一隻狼的原因是因為7號遺言5 6 有身份,所以5 6可能包一隻狼,那如果5 6包一隻狼的話,因為我覺得5號很好啊,然後6號的話就一定會進坑,然後我剛覺得3號會排進剛的狼坑的話因為沒有坑位了所以才會把3號排進來,但他剛表情很糾結,所以應該是個好人,我覺得3 8我們兩個都是好人,你們可能要想一下要怎麼贏,因為女巫還在,如果現在平票,女巫晚上可以把10毒了,因為只剩下一狼,但如果狼衝票就輸了,總之我覺得10號是最後一狼,6號是那個狼走的,就像3號號說的10號怎麼知道6號是好人呢?所以就試著平票,要嘛大家都棄票,晚上女巫去毒10號玩家,過了過了

洛神:第二輪 PK 3 2 1 請投票
棄票:2 5 10


圖片來源
洛神:今天是平安日,天黑請閉眼
待續..

動物園派對

那我們在解釋一下前天遇到的困境與列一下需求
在關連的對應關係
我們現在已有的table

  • 房間(:room)
  • 座位(:seat)
  • 使用者(:user)
  • 身份(:role)
  • 村莊(:village)

其中最後需要的關聯大概會是這樣

  • 1個房間,有12個座位(資料庫關聯已建構完成)
  • 1個座位,可以坐1個玩家(資料庫已建構完成)
  • 1個座位,會對應1個遊戲角色
  • 1個遊戲角色,會擁有技能、職業、職業名稱、陣營
  • 1個房間可以進行多場遊戲
  • 1個房間可根據板子指派村莊身份牌給每個座位

所以前天遇到的困境是村莊的村民(:village)、村民身上的技能(:skill)與座位(:seat)
之間究竟該怎樣關聯
當初覺得使用者技能在不同的職業會有相同,可能需要獨立出來再做關聯
但是又卡到技能(:skill)如果跟村民(:village)分成兩張table,
架構上載似乎已經太複雜而且感覺也沒有必要,因為技能跟村民不會隨著遊戲進程而變動
所以透過昨天拖台錢滑水關鍵策略模式
我們要同時整理
遊戲座位技能(:seat)、遊戲角色(:village)、技能(:skill)、遊戲回合(:game)這些table

怎麼做呢?
我們採用多對多的關聯, The has_many :through Association
來達成目前的目前的目標

/models/seat.rb

class Seat < ApplicationRecord
  rolify
  belongs_to :room
  has_many :games
  has_many :villages, through: :games
  ...
/models/village.rb

class Village < ApplicationRecord
  has_many :games
  has_many :seats, through: :games
end

因為還沒有commit到遠端
先直接還原昨天的db做一點點修正

$ bundle exec rake db:rollback
migrations/2021100614xxxx_create_villages.rb

class CreateVillages < ActiveRecord::Migration[6.1]
  def change
    create_table :villages do |t|
      t.string :title
      t.integer :role
      t.integer :party
      t.integer :skill

      t.timestamps
    end
  end
end

建立新的關聯式資料庫

$ rails g model game
/models/game.rb

class Game < ApplicationRecord
  belongs_to :seat
  belongs_to :village
end

/migrations/2021100713xxxx_create_games.rb

class CreateGames < ActiveRecord::Migration[6.1]
  def change
    create_table :games do |t|
      t.integer :round, default: 1
      t.belongs_to :village, index: true
      t.belongs_to :seat, index: true
      t.timestamps
    end
  end
end

這麼一來就把遊戲座位技能(:seat)、遊戲角色(:village)、技能(:skill)、遊戲回合(:game)
資料庫暫時整合好囉
明天我們將透過這個關聯來分配角色給座位

阿虎每日選幣

$grt

天黑請閉眼


上一篇
[第二十二隻羊] 迷霧森林舞會XVI 策略模式 Strategy Pattern
下一篇
[第二十四隻羊] 迷霧森林舞會XVIII 遊戲角色設定again_final_final
系列文
透過迷霧,看破一切~~ZOOPARTY 動物園派對桌遊設計30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言